package cn.itcast.com.homework.day731;

import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;

/*
1.复制目录，要求：
  a. 复制目录及其所有子目录，保证在复制的目标目录中，目录结构和原目录相同
  b. 同时，对于原目录及其子目录，只将原目录中的指定类型的.java文件，
     复制到目标目录中，对应的相同目录中
 */
public class test1 {
    public static void main(String[] args) throws Exception {
        String src = "D:\\代码\\代码\\代码\\cn\\itcast\\com\\homework\\day731\\dir";
        String des = "D:\\代码\\代码\\代码\\cn\\itcast\\com\\homework\\day731\\dir2";
        copydir(src,des);

    }
    //通过遍历将文件删除，将文件夹继续向下找
    public static void copydir(String src,String des) throws Exception {
        //初始化
        File file1 = new File(src);
        File file2 = new File(des);
        //将对象列表传入
        File[] files = file1.listFiles();
        //假如files[i]是文件，执行复制文件的方法，假如是文件夹将文件夹复制并且递归
        //所以到这里位置的文件对象必定是文件夹
        if (!file2.exists()){
            //如果没有该目录，先创建目录
            file2.mkdirs();
        }

        //根据文件还是文件夹进行分类
        for (int i = 0; i < files.length; i++) {
            if (files[i].isDirectory()){
                //因为是从上而下的进行，所以不用担心父目录不存在的问题
                copydir(files[i].getPath(),des+"\\"+files[i].getName());
            }else if (files[i].isFile()&&files[i].getName().endsWith("java")){
                copyfile(files[i].getPath(),des+"\\"+files[i].getName());
            }
        }
    }

    public static void copyfile(String src, String des) throws Exception {
        FileOutputStream fileOutputStream = new FileOutputStream(des);
        FileInputStream fileInputStream = new FileInputStream(src);

        byte[] bytes = new byte[1024];
        while (fileInputStream.read(bytes)!=-1){
            fileOutputStream.write(bytes);
        }

        fileInputStream.close();
        fileOutputStream.close();
    }
}
